package browser;

import it.sauronsoftware.ftp4j.FTPAbortedException;
import it.sauronsoftware.ftp4j.FTPDataTransferException;
import it.sauronsoftware.ftp4j.FTPException;
import it.sauronsoftware.ftp4j.FTPIllegalReplyException;
import it.sauronsoftware.ftp4j.FTPListParseException;

import java.io.IOException;
import java.sql.SQLException;
import java.util.Map;

import main.Application;
import exception.ModifyRigntsLevelException;
import exception.queryBuilder.AliasNotFound;
import exception.queryBuilder.AttribNotFound;
import exception.queryBuilder.UndefineKeyType;

/**
 * 
 * @author xan
 * 
 * klasa komendy wykonywanej przez edytke po nacisnieciu przycisku OK.
 * Jej konkretyzacje sa zagniezdzone w klasie browser i sa przekazywane 
 * do niej po pobraniu edytki z fabryki.
 *
 */
public abstract class EditCommand {

	private Object sender;
	
	/**
	 * wywoluje odpowiednia akcje w zarzadcy tabeli
	 * przyjmuje rekord zdanymi do przeslania/updatowania/usuniecia z bazy
	 * @throws AliasNotFound 
	 * @throws SQLException 
	 * @throws UndefineKeyType 
	 * @throws ModifyRigntsLevelException 
	 * @throws AttribNotFound 
	 * @throws FTPListParseException 
	 * @throws FTPAbortedException 
	 * @throws FTPDataTransferException 
	 * @throws FTPException 
	 * @throws FTPIllegalReplyException 
	 * @throws IOException 
	 * @throws IllegalStateException 
	 * @throws Exception 
	 *
	 */	
	public abstract void execute(Map<String, String> Record) throws Exception;
	
	/**
	 * zamiast rzucac wyjatek przekaza obsluge do Application
	 * @param Record
	 */
	public void executeSafeMode(Map<String, String> Record)
	{
		
			try {
				execute(Record);
			} 
			catch (Exception e) 			
			{
				Application.getInstance().notifyAboutException(e);
			}					
		
	}
	public Object getSender()
	{
		return sender;
	}
	public void setSender(Object sender)
	{
		this.sender = sender;
	}
	
}
